//package com.hiv.template;
//
//import com.hiv.common.BaseResponse;
//import com.hiv.common.enums.ErrorCode;
//import com.hiv.common.exception.BusinessException;
//import lombok.extern.slf4j.Slf4j;
//import org.slf4j.Logger;
//
///**
// * 通用操作类模板
// */
//@Slf4j
//public class OperateTemplate {
//
//    private static final String MTOP_PREFIX = "FAIL_BIZ_";
//
//    /**
//     * 模板方法
//     *
//     * @param logger   日志
//     * @param bizType  业务类型
//     * @param result   返回结果
//     * @param callBack 回调
//     * @return 结果
//     */
//    public static <T extends BaseResponse> T operate(Logger logger, String bizType, T result, CommonOperateCallback callBack) {
//
//        long start = System.currentTimeMillis();
//
//        String exceptionLog = "执行业务【" + bizType + "】出现异常";
//        try {
//            // 1. 操作前处理
//            callBack.before();
//
//            // 2. 操作执行
//            callBack.execute();
//
//            // 3. 组装结果
//            buildSuccessResult(result);
//        } catch (BusinessException e) {
//            buildFailRpcResult(result, e);
//
//            log.warn(e, exceptionLog);
//        } catch (Exception e) {
//            buildFailCommonResult(result);
//            log.error(e, exceptionLog);
//        } finally {
//            // 操作后处理
//            callBack.after();
//            long time = System.currentTimeMillis() - start;
//            log.info(logger, "执行:{0}, 结果:{1}, 耗时:{2}ms.", bizType, result.isSuccess(), time);
//        }
//        return result;
//    }
//
//    /**
//     * 填充正确的结果类
//     *
//     * @param response 要填充的结果类
//     */
//    public static void buildSuccessResult(BaseResponse response) {
//        if (response.isSuccess()) {
//            response.setMsg(null);
//        } else {
//            throw new BusinessException(ErrorCode.getByCode(response.getCode()), response.getMsg());
//        }
//    }
//
//    /**
//     * 填充错误的结果类
//     *
//     * @param response 要填充的结果类
//     * @param e        业务异常
//     */
//    public static void buildFailRpcResult(BaseResponse response, BusinessException e) {
//        response.setSuccess(false);
//        buildBusDefaultResult(response, e);
//    }
//
//    /**
//     * 填充错误的结果类
//     *
//     * @param response 要填充的结果类
//     * @param e        业务异常
//     */
//    public static void buildBusDefaultResult(BaseResponse response, BusinessException e) {
//        String msgCode = e.getCode().startsWith(MTOP_PREFIX) ? e.getCode() : MTOP_PREFIX + e.getCode();
//        response.setMsgCode(msgCode);
//        if (StringUtil.isNotBlank(e.getErrorMsg())) {
//            response.setMsgInfo(e.getErrorMsg());
//        } else {
//            response.setMsgInfo(e.getView());
//        }
//    }
//
//    /**
//     * 填充错误的结果类
//     *
//     * @param response 要填充的结果类
//     */
//    public static void buildFailCommonResult(BaseResponse response) {
//        response.setSuccess(false);
//        response.setMsgInfo(BusinessException.UNKNOWN_ERROR.getView());
//        String msgCode = MTOP_PREFIX + CrmBenchResultCode.UNKNOWN_ERROR.name();
//        response.setMsgCode(msgCode);
//    }
//
//}